home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / nrpas13.zip / SHELL.PAS < prev    next >
Pascal/Delphi Source File  |  1991-04-29  |  724b  |  32 lines

  1. PROCEDURE shell(n: integer; VAR arr: glnarray);
  2. (* Programs using routine SHELL must define the type
  3. TYPE
  4.    glnarray = ARRAY [1..np] OF real;
  5. in the main routine, with np >= n.   *)
  6. LABEL 3;
  7. CONST
  8.    aln2i=1.442695022;
  9.    tiny=1.0e-5;
  10. VAR
  11.    nn,m,lognb2,l,k,j,i: integer;
  12.    t: real;
  13. BEGIN
  14.    lognb2 := trunc(ln(n)*aln2i+tiny);
  15.    m := n;
  16.    FOR nn := 1 TO lognb2 DO BEGIN
  17.       m := m DIV 2;
  18.       k := n-m;
  19.       FOR j := 1 TO k DO BEGIN
  20.          i := j;
  21. 3:         l := i+m;
  22.          IF (arr[l] < arr[i]) THEN BEGIN
  23.             t := arr[i];
  24.             arr[i] := arr[l];
  25.             arr[l] := t;
  26.             i := i-m;
  27.             IF (i >= 1) THEN GOTO 3
  28.          END
  29.       END
  30.    END
  31. END;
  32.